unit URotinaInutilizarNFe;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, URotinasBase, Mask, ToolEdit, RXDBCtrl, StdCtrls, ComCtrls,
  Buttons, ExtCtrls,shellapi, DB, DBTables;

type
  TFRotinaInutilizarNFe = class(TFRotinasBase)
    Edit4: TEdit;
    Label4: TLabel;
    Edit5: TEdit;
    Label5: TLabel;
    GroupBox1: TGroupBox;
    Label1: TLabel;
    Label2: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    Label3: TLabel;
    Edit3: TEdit;
    TEmpresa: TTable;
    procedure BtnExecClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Edit1Exit(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    Function RetornaMovivo(Motivo:string):string;
    Procedure Incluir_NFI(NF_NUMERO:integer;NF_SERIE:string;NF_ANO:string;NF_MOTIVO:string;DATA:string);
  end;

var
  FRotinaInutilizarNFe: TFRotinaInutilizarNFe;

implementation

uses UDmGestao, UGeral,  UCobranca, UGestao;
{$R *.dfm}

procedure TFRotinaInutilizarNFe.BtnExecClick(Sender: TObject);
var
 par,caminho : string;
 handle : THandle;
 inicio,fim:integer;
 DATA_ATUAL:String;
begin
  inherited;
  inicio:=0;
  fim:=0;

  if Edit1.Text = '' then
  begin
   ShowMessage('Campo Inicio Tem que ser preenchido !');
   exit;
  end;

  if Edit2.Text = '' then
  begin
   ShowMessage('Campo Fim Tem que ser preenchido !');
   exit;
  end;

  if Edit3.Text = '' then
  begin
   ShowMessage('Campo Serie Tem que ser preenchido !');
   exit;
  end;

  if Edit4.Text = '' then
  begin
   ShowMessage('Campo Motivo Tem que ser preenchido !');
   exit;
  end;

  if Edit5.Text = '' then
  begin
   ShowMessage('Campo Ano Tem que ser preenchido !');
   exit;
  end;


  par :=  'LINK ' +
          'INUTILIZA ' +
          Edit1.Text +
          ' ' + Edit2.Text +
          ' ' + Edit3.Text +
          ' ' + Edit5.Text +
          ' ' + RetornaMovivo(Edit4.Text) +
          ' ' + RemoveMascara(TEmpresa.FieldByName('EMP_CNPJ').AsString);

  caminho := GetCurrentDir +  '\PNFE.exe';
  ShellExecute(handle, '',pchar(caminho) , PCHAR(PAR) ,'',SW_SHOW);


  if application.MessageBox('A NFe Foi Inutilizada com sucesso ?','',
                            MB_YESNO + MB_IconQuestion + MB_DEFBUTTON2) = IDno  then
  begin
     exit;
  end;

   // -- Incluir na tabela NFINULIZACAO  -------
    INICIO := StrToInt(Edit1.Text);
    FIM    := StrToInt(Edit2.Text);
   while INICIO <= FIM do
   begin
      DATA_ATUAL:= FormatDateTime('MM/DD/YYYY HH:MM:SS',now);
      Incluir_NFI(INICIO,Edit3.Text,Edit5.Text,Edit4.Text,DATA_ATUAL);
      INICIO:=INICIO+1;
   end;

  Close;

end;

procedure TFRotinaInutilizarNFe.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin

 inherited;

  FRotinaInutilizarNFe.Release;
  FRotinaInutilizarNFe := Nil;

end;

procedure TFRotinaInutilizarNFe.Edit1Exit(Sender: TObject);
begin
  inherited;

  Edit2.Text:=Edit1.Text;

end;

procedure TFRotinaInutilizarNFe.FormCreate(Sender: TObject);
begin
  inherited;
  Edit5.Text:= FormatDateTime('yyyy',now);

 try
  TEmpresa.Close;
  TEmpresa.Filter:= 'EMP_CODIGO = '+IntToStr(Codigoempresa);
  TEmpresa.Filtered:=true;
  TEmpresa.Open;
 Except
   ShowMessage('Erro ao carregar a empresa.');
   close;
 end;

end;

function TFRotinaInutilizarNFe.RetornaMovivo(Motivo: string): string;
var i:integer;
begin

i:=0;

  while i <= Length(Motivo) do
  begin
    if motivo[i] = ' ' then
       motivo[i] := '%';

    Inc(i)
  end;

  Result:=motivo;

end;

procedure TFRotinaInutilizarNFe.Incluir_NFI(NF_NUMERO: integer; NF_SERIE,
  NF_ANO, NF_MOTIVO: string;DATA:string);
const INSERT_NFI =
   ' insert into nfinutilizacao '+
   ' ( '+
   ' nfinutilizacao.nfi_codigo, '+
   ' nfinutilizacao.nfi_nf_numero, '+
   ' nfinutilizacao.nfi_nf_serie, '+
   ' nfinutilizacao.nfi_nf_ano, '+
   ' nfinutilizacao.nfi_nf_motivo, '+
   ' nfinutilizacao.codigoempresa, '+
   ' nfinutilizacao.excluido, '+
   ' nfinutilizacao.usuario_cadastro, '+
   ' nfinutilizacao.data_cadastro '+
   ' ) values (%s,%s,%s,%s,%s,%s,%s,%s,%s) ';
begin

      executaSQL(Format(INSERT_NFI,[
          IntToStr(Retorna_Codigo_Generetor('gen_nfinutilizacao')),
          QuotedStr(IntToStr(NF_NUMERO)),
          QuotedStr(NF_SERIE),
          QuotedStr(NF_ANO),
          QuotedStr(NF_MOTIVO),
          IntToStr(Codigoempresa),
          QuotedStr('N'),
          QuotedStr(Usuario),
          QuotedStr(DATA)]));
          executaSQL('COMMIT;');
          
end;

end.
